import os
from minio import Minio
from docx import Document
from pathlib import Path


def download_word_file_from_minio(download_path):
    """
    从 MinIO 下载 Word 文档到本地。
    """
    bucket_name = "fas"
    object_name = "/template/patent.docx"
    try:
        # 初始化 MinIO 客户端
        client = Minio(
            "10.0.25.150:9000",
            access_key="erdp_test",
            secret_key="test@erdp@minio@2022",
            secure=False  # 如果是 HTTP 服务，则设置为 False
        )

        # 检查存储桶是否存在
        if not client.bucket_exists(bucket_name):
            raise Exception(f"Bucket {bucket_name} does not exist on MinIO.")

        # 下载文件到本地
        client.fget_object(bucket_name, object_name, download_path)
        print(f"文件已成功从 MinIO 下载到: {download_path}")

    except Exception as e:
        raise Exception(f"从 MinIO 下载文件时出错: {str(e)}")


def write_responses_to_word_file(word_file_path, responses, save_path, extra_data):
    """
    将 responses 写入到 Word 文档的表格中，从左往右，从上往下，依次填写到第一个表格的单元格内。

    :param extra_data:
    :param word_file_path: 本地 Word 模板的路径
    :param responses: 要写入的内容（列表，每个元素是字典，包含 question 和 answer）
    :param save_path: 保存修改后文档的路径
    """
    try:
        # 打开 Word 文件
        doc = Document(word_file_path)

        # 获取文档的第一个表格
        table = doc.tables[0]
        if not table:
            raise Exception("文档中未找到表格。")

        # 获取所有单元格 (按照左到右，从上到下的顺序排列)
        cells = table._cells  # 这是一个扁平的列表，包含所有单元格
        total_cells = len(cells)

        # 检查是否有足够的单元格来填入 responses
        if len(responses) > total_cells:
            raise Exception(f"表格的单元格数量不足。所需单元格数量: {len(responses)}，可用单元格数量: {total_cells}。")

        # 填充数据
        cells[1].text = responses[0]["answer"]
        cells[10].text = responses[1]["answer"]
        cells[11].text = responses[2]["answer"]

        # for index, response in enumerate(responses):
        #     cell = cells[index]
        #     cell.text = f"{response['answer']}"

        # 保存到指定路径
        doc.save(save_path)
        print(f"修改后的文档已保存到: {save_path}")

    except Exception as e:
        raise Exception(f"写入 Word 文档表格时出错: {str(e)}")


if __name__ == "__main__":
    responses = [
        {"question": "问题1是什么？", "answer": "这是问题1的答案。"},
        {"question": "问题2是什么？", "answer": "这是问题2的答案。"},
        {"question": "问题3是什么？", "answer": "这是问题3的答案。"},
        {"question": "问题4是什么？", "answer": "这是问题4的答案。"},
    ]
    download_path = "/Users/lvfushun/Downloads/patent.docx"
    write_responses_to_word_file(word_file_path=download_path, responses=responses, save_path=download_path, extra_data={})
